<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class checksCancelaciones extends CI_Controller {

    public function __construct() {
        parent::__construct();
        session_start();
        $this->estaLogueado();
        $this->load->model('reservaM');
        $this->load->model('cliente_x_reservaM');
    }

    public function index() {
        
    }

    public function hacerChekin() {
        if (!empty($_POST["idReserva"]) && $this->validarReservaPost($_POST["idReserva"])) {
            $datosReserva = $this->reservaM->obtenerDatos("fecha_ingreso,numero_personas", $_POST["idReserva"]);
            $fechaIngreso = $datosReserva[0]->fecha_ingreso;
            $hoy = date("Y-m-d");
            $cantidadHuespedes = $this->cliente_x_reservaM->contarHuespedes($_POST["idReserva"]);
            $cantidadHuespedes = $cantidadHuespedes[0]->cantidad;
            if ($fechaIngreso <= $hoy) {
                if ($cantidadHuespedes == $datosReserva[0]->numero_personas) {
                    $this->reservaM->hacerCheckin($_POST["idReserva"], $_SESSION["usuario"]["id_usuario"]);
                    $_SESSION["mensaje"]["contenido"] = "CheckIn realizado exitosamente";
                    $_SESSION["mensaje"]["tipo"] = "exito";
                    header("location:../facturacion?reserva=" . $_POST["idReserva"]);
                } else {
                    $huspedesFaltantes = $datosReserva[0]->numero_personas - $cantidadHuespedes;
                    if ($huspedesFaltantes > 0) {
                        $_SESSION["mensaje"]["contenido"] = "Faltan $huspedesFaltantes húespedes por registrar.";
                    } else if ($huspedesFaltantes < 0) {
                        $huspedesFaltantes = $huspedesFaltantes * -1;
                        $_SESSION["mensaje"]["contenido"] = "Existen $huspedesFaltantes húespedes adicioanles. Por favor verifiqe el número de persnas de la reserva.";
                    }

                    $_SESSION["mensaje"]["tipo"] = "advertencia";
                    header("location:../facturacion?reserva=" . $_POST["idReserva"]);
                }
            } else {
                $_SESSION["mensaje"]["contenido"] = "La fecha de ingreso no es igual ni posterior a la fecha de hoy.";
                $_SESSION["mensaje"]["tipo"] = "advertencia";
                header("location:../facturacion?reserva=" . $_POST["idReserva"]);
            }
        }
    }

    public function hacerChekout() {
        $this->load->model('tarifa_x_diaM');
        $this->load->model('venta_producto_servicioM');
        $this->load->model('establecimientoM');
        $this->load->model('ajusteM');
        $this->load->model('ingreso_reservaM');

        if (!empty($_POST["idReserva"]) && $this->validarReservaPost($_POST["idReserva"])) {
            $idReserva = $_POST["idReserva"];
            //Costos Totales
            $hospedaje = $this->tarifa_x_diaM->obtenerCostosHospedaje($idReserva);
            $hospedaje = $hospedaje[0]->totalHospedaje;
            $impuestoHospedaje = $this->reservaM->obtenerDatos("impuesto", $idReserva);
            $impuestoHospedaje = $impuestoHospedaje[0]->impuesto;
            $consumos = $this->venta_producto_servicioM->obtenerVentas($idReserva);
            $consumoSubTotal = 0;
            $impuestosConsumo = 0;
            foreach ($consumos as $row) {
                $consumoSubTotal = $consumoSubTotal + $row->total_venta;
                $impuestosConsumo = $impuestosConsumo + $row->impuesto;
            }
            $consumoTotal = $consumoSubTotal + $impuestosConsumo;
            $seguroHotelero = 0;
            $data["seguroHotelero"] = $this->establecimientoM->obtenerDatos("tiene_seguro_hotelero, seguro_hotelero", $_SESSION["establecimiento"]["id_establecimiento"]);
            if ($data["seguroHotelero"][0]->tiene_seguro_hotelero == 1) {
                $seguroHotelero = $data["seguroHotelero"][0]->seguro_hotelero;
            }


            //Ajustes
            $ajustes = $this->ajusteM->obtenerAjustes($idReserva);
            $ajustes = $ajustes[0]->totalAjuste;


            //Ingresos
            $ingresos = $this->ingreso_reservaM->obtenerIngresos($idReserva);
            $ingresos = $ingresos[0]->totalIngreso;

            $totalReserva = $hospedaje + $impuestoHospedaje + $consumoTotal + $seguroHotelero + $ajustes;
            $totalAlojamiento = $hospedaje + $impuestoHospedaje;
            if ($totalReserva - $ingresos == 0) {
                $this->reservaM->hacerCheckout($idReserva, $totalReserva, $totalAlojamiento, $_SESSION["usuario"]["id_usuario"]);
                $_SESSION["mensaje"]["contenido"] = "CheckOut realizado exitosamente";
                $_SESSION["mensaje"]["tipo"] = "exito";
                header("location:../facturacion?reserva=" . $_POST["idReserva"]);
            } else {
                $_SESSION["mensaje"]["contenido"] = "Se debe cancelar la deuda antes de realizar el CheckOut";
                $_SESSION["mensaje"]["tipo"] = "advertencia";
                header("location:../facturacion?reserva=" . $_POST["idReserva"]);
            }
        }
    }

    public function cancelarReserva() {
        if (!empty($_POST["idReserva"]) && $this->validarReservaPost($_POST["idReserva"])) {
            $idReserva = $_POST["idReserva"];
            $this->reservaM->eliminarReserva($idReserva, $_SESSION["usuario"]["id_usuario"]);
            $_SESSION["mensaje"]["contenido"] = "Reserva cancelada exitosamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:../calendario");
        } else {
            $_SESSION["mensaje"]["contenido"] = " La reserva no existe.";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("Location:../calendario");
        }
    }

    private function validarReservaPost($idReserva) {
        $r = $this->reservaM->esMiReserva($idReserva, $_SESSION['establecimiento']['id_establecimiento']);
        if ($r[0]->cantidad == 1) {
            return true;
        } else {
            return false;
        }
    }

}